package java_thinking.unit_21._21_3;

import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.Vector;

/**
 * @Desc:   3-11 在可变对象基础上构建不可变类
 * @author: cww
 * @DateTime: 2019-06-01 15:12
 */

public class ThreeStooges {
    /**
     * 不可变对象与不可变对象引用存在差异
     */
    private final Set<String> stooges = new HashSet<>();

    /**
     * 通过构造器来对不可变对象初始化，能够使该引用除了构造函数以及其调用者之外的代码来访问；
     */
    public ThreeStooges() {
        stooges.add("Moe");
        stooges.add("Larry");
        stooges.add("Curly");
    }
    public boolean isStooge(String name) {
        return stooges.contains(name);
    }

    /**
     * 欲作为不可变的对象 stooges 发布出去后就逸出了，就可能被外部不可信任的程序所修改
     * @return
     */
    public Set<String> getStooges() {
        return stooges;
    }
    public String getStoogeNames() {
        List<String> stooges = new Vector<String>();
        stooges.add("Moe");
        stooges.add("Larry");
        stooges.add("Curly");
        return stooges.toString();
    }
}
class TestFinal {
    public static void main(String[] args) {
        add();
    }
    public static void add() {
        ThreeStooges stooges = new ThreeStooges();
        Set<String> s = stooges.getStooges();
        s.add("xxx");
        System.out.println(s);
        System.out.println(stooges.getStooges());
    }
}